package main

import (
	"math/rand"
	"sort"
	"time"
)

/* 分层抽样 */
// 考虑临界的问题，如果每一层数量相差太大，应该怎么处理-一个是1,一个是100
// 这个属于离群值,不应该加入计算.所以向下取整,没有就没有了.

type D []int

func LevelSelectReset(ratio float64, data ...D) D {
	rand.NewSource(time.Now().Unix())
	var res []int
	for _, values := range data {
		length := len(values)
		num := int(float64(length) * ratio)
		for i := 0; i < num; i++ {
			res = append(res, values[rand.Intn(length)])
		}
	}
	return D(res)
}

func LevelSelect(ratio float64, data ...D) D {
	var res []int
	for _, values := range data {
		sort.Ints(values)
		length := len(values)
		num := int(float64(length) * ratio)
		for i := 0; i < num; i++ {
			ind := length / num * i
			res = append(res, values[ind])
		}
	}
	return D(res)
}
